/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufjf.pos.model.dao;

import br.ufjf.pos.model.Usuario;
import br.ufjf.pos.util.GenericDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author cleber
 */
public class UsuarioDAO extends GenericDao<Usuario, Integer> {

    public void alterarSenha(Usuario obj) throws SQLException, ClassNotFoundException {
        String sql = "UPDATE TBusuario SET DFsenha = MD5(?) WHERE DFid_usuario = ? "; 
        ArrayList<String> lista = new ArrayList<String>();
        
        
        lista.add(obj.getSenha());
        lista.add(String.valueOf(obj.getIdUsuario()));
        
        executaDML(sql, lista);
        
    }
    
    @Override
    public void inserir(Usuario obj) throws SQLException, ClassNotFoundException {
        String sql = "INSERT INTO TBusuario (DFlogin, DFsenha, DFid_nivel_acesso, DFid_funcionario) VALUES ( ?, MD5(?), ? ,?)";
        
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.getLogin());
        lista.add(obj.getSenha());
        lista.add(String.valueOf(obj.getIdNivelAcesso()));
        lista.add(String.valueOf(obj.getIdFuncionario()));
        
        executaDML(sql, lista);
    }

    @Override
    public void alterar(Usuario obj) throws SQLException, ClassNotFoundException {
        ArrayList<String> lista = new ArrayList<String>();
        String sql = "UPDATE TBusuario SET senha = MD5(?) WHERE DFid_usuario = ? ";        
        lista.add(obj.toString());
        
        //ResultSet rs = executaDML(sql, lista);
        //rs.next();     
        executaDML(sql, lista);        
    }

    @Override
    public void apagar(Usuario obj) throws SQLException, ClassNotFoundException {
        ArrayList<String> lista = new ArrayList<String>();
        String sql = "DELETE FROM TBusuario WHERE DFid_usuario = ? ";        
        //lista.remove(obj.toString());
        lista.add(obj.toString());
        
        //ResultSet rs = executaDML(sql, lista);
        //rs.next();
        executaDML(sql, lista);
        
    }

    @Override
    public Usuario pesquisaChave(Integer obj) throws SQLException, ClassNotFoundException {
        String sql = "SELECT * FROM TBusuario WHERE DFid_usuario = ? ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(obj.toString());
        
        ResultSet rs = executasql(sql, lista);
        if(rs.next()){        
            Usuario u = new Usuario(rs.getString("login"),rs.getString("senha"), rs.getInt("idNivel"));
            return u;
        } else {
            return null;
        } 
    }

    @Override
    public ArrayList<Usuario> buscarTodos() throws SQLException, ClassNotFoundException {
        String sql = "SELECT * FROM TBusuario  ";
        ArrayList<String> lista = new ArrayList<String>();        
        //lista.add(obj.toString());
        
        ArrayList<Usuario> listaUsuario = new ArrayList<Usuario>();
        
        ResultSet rs = executasql(sql, lista);
        while(rs.next()){               
            Usuario u = new Usuario(rs.getString("login"),rs.getString("senha"), rs.getInt("idNivel"));
            listaUsuario.add(u);
        } 
     
        return listaUsuario;
    }

    
    public Usuario validaLogin(String login, String senha) throws SQLException, ClassNotFoundException{
        
        ArrayList<String> lista = new ArrayList<String>();        
        lista.add(login);
        lista.add(senha);
        
        String sql = "SELECT * FROM TBusuario WHERE DFlogin = ? AND DFsenha = MD5(?)";
        ResultSet rs = executasql(sql, lista);
        if(rs.next()){        
            Usuario u = new Usuario(rs.getString("DFlogin"),rs.getString("DFsenha"),rs.getInt("DFid_nivel_acesso"), rs.getInt("DFid_funcionario"));
            u.setIdUsuario(Integer.parseInt(rs.getString("DFid_usuario")));
            return u;
        } else {
            return null;
        }                            
    }
     public boolean isRegistroExistenteBancoDados(String login) throws SQLException, ClassNotFoundException {
        String sql = "SELECT * FROM TBusuario WHERE DFlogin = ?";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(login);

        ResultSet rs = executasql(sql, lista);
        if(rs.next()){                                
            return true;
        } else {
            return false;
        }   
    }
     public boolean isRegistroExistenteBancoDadosComOutroID(String login, int idUsuario) throws SQLException, ClassNotFoundException {
        String sql = "SELECT * FROM TBusuario WHERE DFlogin = ? AND DFid_usuario <> ? ";
        ArrayList<String> lista = new ArrayList<String>();
        lista.add(login);
        lista.add(String.valueOf(idUsuario));

        ResultSet rs = executasql(sql, lista);
        if(rs.next()){                                
            return true;
        } else {
            return false;
        }   
    }
    
}
